function* 斐波那契() {
    let 当前 = 0;
    let 下一个 = 1;
    while(true) {
        const 重置 = yield 当前;
        [当前, 下一个] = [下一个, 下一个 + 当前];
        if (重置) {
            当前 = 0;
            下一个 = 1;
        }
        if (当前 >= 20) {
            return ;
        }
    }
}

const 序列 = 斐波那契();
console.log(序列.next().value);
console.log(序列.next().value);
console.log(序列.next().value);
console.log(序列.next().value);
console.log(序列.next().value);
console.log(序列.next().value);
console.log(序列.next().value);
console.log(序列.next(true).value);
console.log(序列.next().value);
console.log(序列.next().value);
console.log(序列.next().value);

console.log('--------------------------');

for (const 条目 of 序列) {
    console.log(条目);
}